<template>
    <div>
        <h1>我在{{ school }} 学习，{{ subject }}</h1>
        <h1>当前和：{{ sum }}</h1> 模板里面可以省略this，因为它可以看到 vc身上的所有东西<br>
        <h1>放大10倍：{{ bigSum }}</h1>
        <select v-model.number="n">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
        <button @click="increament()">+</button>
        <button @click="decreament(n)">-</button>
        <button @click="increamentOdd(n)">当前和 是奇数才能加</button>
        <button @click="increamentWait(n)">延迟500毫秒地加</button>
    </div>
</template>

<script>
import Vue from 'vue';
import { mapState, mapGetters } from 'vuex';
import { mapActions, mapMutations } from 'vuex';
export default Vue.extend({
    name: 'Count',
    data() {
        return {
            n: 1,
        }
    },
    methods: {
        /* commit通用写法
        increament() {
            this.$store.commit('JIA', this.n)
        },
        decreament() {
            this.$store.commit('JIAN', this.n)
        }, */

        // 如果页面显示 [object PointerEvent] 就说明传入值的是默认鼠标点击事件参数，我们需要在模板显示调用函数：@click="increament(n)"
        ...mapMutations({ 'increament': 'JIA', 'decreament': 'JIAN' }),
        // ...mapMutations(['JIA', 'JIAN']),
        // ——————————————————————————————————————————————————————
        /* dispatch通用写法
        increamentOdd() {
            this.$store.dispatch('jiaOdd', this.n)
        },
        increamentWait() {
            this.$store.dispatch('jiaWait', this.n)
        }, */
        ...mapActions({ 'increamentOdd': 'jiaOdd', 'increamentWait': 'jiaWait' }),
        // ...mapActions(['jiaOdd', 'jiaWait']),
    },
    computed: {
        // mapState和mapGetters各有两种写法：分别是传入对象（里面是字符串kv键值对）和传入数组（里面是字符串）
        // ...mapState({ 'he': 'sum', 'xuexiao': 'school', 'xueke': 'subject' }), // 1.对象写法：可以改生成的名字，个人喜欢这种写法
        ...mapState(['sum', 'school', 'subject']), // 2.数组写法：state是什么名字，最终生成的就是什么名字
        ...mapGetters({ 'bigSum': 'bigSum' }), // 同理的getters映射的对象写法
        // ...mapGetters(['bigSum']),// 同理的getters映射的数组写法
    },
    mounted() {
        console.log("Count", this);
    }
}) 
</script>

<style>
button {
    margin: 3px;
}
</style>